#ifndef __MAIN_H
#define __MAIN_H

#include "gd32f4xx_hal_conf.h"

#define PWM_Pin GPIO_PIN_6
#define PWM_GPIO_Port GPIOA
#define Z_LIMIT_Pin GPIO_PIN_1
#define Z_LIMIT_GPIO_Port GPIOB
#define Z_RESET_Pin GPIO_PIN_10
#define Z_RESET_GPIO_Port GPIOB
#define CLKO_Z_Pin GPIO_PIN_6
#define CLKO_Z_GPIO_Port GPIOC
#define CLKI_Z_Pin GPIO_PIN_8
#define CLKI_Z_GPIO_Port GPIOA
#define LOCK_Pin GPIO_PIN_9
#define LOCK_GPIO_Port GPIOA
#define CW_Pin GPIO_PIN_10
#define CW_GPIO_Port GPIOA
#define EN_Pin GPIO_PIN_11
#define EN_GPIO_Port GPIOA
#define T1_LOCK_Pin GPIO_PIN_8
#define T1_LOCK_GPIO_Port GPIOE
#define T1_CW_Pin GPIO_PIN_7
#define T1_CW_GPIO_Port GPIOE
#define T1_EN_Pin GPIO_PIN_15
#define T1_EN_GPIO_Port GPIOE
#define T2_LOCK_Pin GPIO_PIN_10
#define T2_LOCK_GPIO_Port GPIOD
#define T2_CW_Pin GPIO_PIN_9
#define T2_CW_GPIO_Port GPIOD
#define T2_EN_Pin GPIO_PIN_12
#define T2_EN_GPIO_Port GPIOD
#define V1_LOCK_Pin GPIO_PIN_7
#define V1_LOCK_GPIO_Port GPIOB
#define V1_CW_Pin GPIO_PIN_5
#define V1_CW_GPIO_Port GPIOB
#define V1_EN_Pin GPIO_PIN_9
#define V1_EN_GPIO_Port GPIOB
#define V2_LOCK_Pin GPIO_PIN_8
#define V2_LOCK_GPIO_Port GPIOC
#define V2_CW_Pin GPIO_PIN_7
#define V2_CW_GPIO_Port GPIOC
#define V2_EN_Pin GPIO_PIN_8
#define V2_EN_GPIO_Port GPIOA
#define V3_LOCK_Pin GPIO_PIN_1
#define V3_LOCK_GPIO_Port GPIOA
#define V3_CW_Pin GPIO_PIN_0
#define V3_CW_GPIO_Port GPIOA
#define V3_EN_Pin GPIO_PIN_3
#define V3_EN_GPIO_Port GPIOA
#define V4_LOCK_Pin GPIO_PIN_2
#define V4_LOCK_GPIO_Port GPIOA
#define V4_CW_Pin GPIO_PIN_0
#define V4_CW_GPIO_Port GPIOA
#define V4_EN_Pin GPIO_PIN_3
#define V4_EN_GPIO_Port GPIOA
#define S1_LOCK_Pin GPIO_PIN_4
#define S1_LOCK_GPIO_Port GPIOD
#define S1_CW_Pin GPIO_PIN_3
#define S1_CW_GPIO_Port GPIOD
#define S1_EN_Pin GPIO_PIN_4
#define S1_EN_GPIO_Port GPIOB
#define S2_LOCK_Pin GPIO_PIN_14
#define S2_LOCK_GPIO_Port GPIOB
#define S2_CW_Pin GPIO_PIN_13
#define S2_CW_GPIO_Port GPIOB
#define S2_EN_Pin GPIO_PIN_8
#define S2_EN_GPIO_Port GPIOD
#define R1_LOCK_Pin GPIO_PIN_12
#define R1_LOCK_GPIO_Port GPIOD
#define R1_CW_Pin GPIO_PIN_0
#define R1_CW_GPIO_Port GPIOC
#define R1_EN_Pin GPIO_PIN_11
#define R1_EN_GPIO_Port GPIOD
#define R2_LOCK_Pin GPIO_PIN_2
#define R2_LOCK_GPIO_Port GPIOC
#define R2_CW_Pin GPIO_PIN_3
#define R2_CW_GPIO_Port GPIOC
#define R2_EN_Pin GPIO_PIN_1
#define R2_EN_GPIO_Port GPIOC
#define V1_HOME_Pin GPIO_PIN_0
#define V1_HOME_GPIO_Port GPIOE
#define V2_HOME_Pin GPIO_PIN_0
#define V2_HOME_GPIO_Port GPIOD
#define V3_HOME_Pin GPIO_PIN_4
#define V3_HOME_GPIO_Port GPIOC
#define V4_HOME_Pin GPIO_PIN_2
#define V4_HOME_GPIO_Port GPIOC
#define S1_HOME_Pin GPIO_PIN_2
#define S1_HOME_GPIO_Port GPIOD
#define S2_HOME_Pin GPIO_PIN_12
#define S2_HOME_GPIO_Port GPIOB
#define R2_HOME_Pin GPIO_PIN_12
#define R2_HOME_GPIO_Port GPIOE
#define S1_LIMIT_Pin GPIO_PIN_1
#define S1_LIMIT_GPIO_Port GPIOD
#define S2_LIMIT_Pin GPIO_PIN_14
#define S2_LIMIT_GPIO_Port GPIOE
#define R2_LIMIT_Pin GPIO_PIN_13
#define R2_LIMIT_GPIO_Port GPIOE
#define V3_LIMIT_Pin GPIO_PIN_10
#define V3_LIMIT_GPIO_Port GPIOE
#define PREL_EXIST_Pin GPIO_PIN_10          // alias BASKET_READY_PREL
#define PREL_EXIST_GPIO_Port GPIOD
#define PRER_EXIST_Pin GPIO_PIN_2           // alias BAKET_READY_PRER
#define PRER_EXIST_GPIO_Port GPIOE
#define IMPORTL_READY_Pin GPIO_PIN_1
#define IMPORTL_READY_GPIO_Port GPIOE
#define IMPORTR_READY_Pin GPIO_PIN_9
#define IMPORTR_READY_GPIO_Port GPIOD
#define IMPORTL_READY_2_Pin GPIO_PIN_10
#define IMPORTL_READY_2_GPIO_Port GPIOD
#define IMPORTR_READY_2_Pin GPIO_PIN_10
#define IMPORTR_READY_2_GPIO_Port GPIOD
#define EXPORT_READY_Pin GPIO_PIN_5         // alias RACK_ARRIVE
#define EXPORT_READY_GPIO_Port GPIOA
#define STARTL_PRESSED_Pin GPIO_PIN_6
#define STARTL_PRESSED_GPIO_Port GPIOC
#define STARTR_PRESSED_Pin GPIO_PIN_14
#define STARTR_PRESSED_GPIO_Port GPIOD
#define STOP_PRESSED_Pin GPIO_PIN_12
#define STOP_PRESSED_GPIO_Port GPIOD
#define TUBE_EXIST_Pin GPIO_PIN_5
#define TUBE_EXIST_GPIO_Port GPIOC
#define RACK_FIXED_Pin GPIO_PIN_1
#define RACK_FIXED_GPIO_Port GPIOB
#define HAT_EXIST_Pin GPIO_PIN_4
#define HAT_EXIST_GPIO_Port GPIOA
#define BASKET_EXIST_L_Pin GPIO_PIN_3
#define BASKET_EXIST_L_GPIO_Port GPIOE
#define BASKET_EXIST_R_Pin GPIO_PIN_4
#define BASKET_EXIST_R_GPIO_Port GPIOE
#define RACK_ARRIVE_Pin GPIO_PIN_5
#define RACK_ARRIVE_GPIO_Port GPIOA
#define LED_Pin GPIO_PIN_11
#define LED_GPIO_Port GPIOE
#define STRIP_LED_Pin GPIO_PIN_7
#define STRIP_LED_GPIO_Port GPIOD
#define STARTL_LED_Pin GPIO_PIN_15
#define STARTL_LED_GPIO_Port GPIOD
#define STARTR_LED_Pin GPIO_PIN_13
#define STARTR_LED_GPIO_Port GPIOD
#define STOP_LED_Pin GPIO_PIN_11
#define STOP_LED_GPIO_Port GPIOE
#define SWITCH4_Pin GPIO_PIN_12
#define SWITCH4_GPIO_Port GPIOC
#define SWITCH3_Pin GPIO_PIN_11
#define SWITCH3_GPIO_Port GPIOC
#define SWITCH2_Pin GPIO_PIN_10
#define SWITCH2_GPIO_Port GPIOC
#define SWITCH1_Pin GPIO_PIN_15
#define SWITCH1_GPIO_Port GPIOA
#define DISINFECTION_Pin GPIO_PIN_4
#define DISINFECTION_GPIO_Port GPIOB
#define NTRIGED_Pin GPIO_PIN_2
#define NTRIGED_GPIO_Port GPIOB


#define USART0_IRQ_NVIC_PRE_PRIORITY  0
#define USART0_IRQ_NVIC_SUB_PRIORITY  0

#define TIMER6_NVIC_IRQ_PRE_PRIORITY  1
#define TIMER6_NVIC_IRQ_SUB_PRIORITY  0


void _Error_Handler(char *, int);

#define Error_Handler() _Error_Handler(__FILE__, __LINE__)

#endif /* __MAIN_H */
